// pages/songDetail/songDetail.js
import PubSub from 'pubsub-js'
import moment from 'moment'
import request from '../../utils/request'

// 获取全局实例
const appInstance = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay: false, // 音乐是否播放
    song: {}, // 歌曲详情
    musicLink: '', //音乐链接
    currentTime:'00:00', // 当前播放时长
    durationTime: '00:00', // 总时长
    currentWidth: 0, // 实时进度条长度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // options：用于接收路由跳转的query参数
    let musicId = options.musicId
    this.getMusicInfo(musicId)
    
    // 判断当前页面是否有音乐播放
    if(appInstance.globalData.isMusicPlay&&appInstance.globalData.musicId===musicId){
      // 修改当前页面的播放状态为true
      this.setData({
        isPlay: true
      })
    }

    // 创建控制音乐播放的实例
    this.backgroundAudioManager = wx.getBackgroundAudioManager()
    // 监听音乐播放和暂停
    this.backgroundAudioManager.onPlay(()=>{
      this.changePlayState(true)
      // 修改全局音乐状态
      appInstance.globalData.musicId = musicId
    })
    this.backgroundAudioManager.onPause(()=>{
      this.changePlayState(false)
    })
    this.backgroundAudioManager.onStop(()=>{
      this.changePlayState(false)
    })
    // 监听音乐实时播放进度
    this.backgroundAudioManager.onTimeUpdate(()=>{
      let currentTime = moment(this.backgroundAudioManager.currentTime*1000).format('mm:ss')
      let currentWidth = this.backgroundAudioManager.currentTime / this.backgroundAudioManager.duration*450
      this.setData({
        currentTime,
        currentWidth
      })
    })
    // 监听音乐自然播放结束自动切到下一首歌
    this.backgroundAudioManager.onEnded(()=>{
      // 自动切换至下一首并播放
      PubSub.publish('switchType','next')
      PubSub.subscribe('musicId', (msg, musicId) => {
        // 获取音乐详情信息
        this.getMusicInfo(musicId);
        // 自动播放当前的音乐
        this.musicControl(true, musicId);
        // 取消订阅
        PubSub.unsubscribe('musicId');
      })
      // 将实时进度条长度还原成0
      this.setData({
        currentWidth: 0
      })
    })
  },

  // 拖动进度条
  handleTouchStart(e){
    console.log(e.changedTouches[0]);
  },
  handleTouchMove(){
    console.log("move");
  },
  handleTouchEnd(){

  },
  // 修改音乐播放状态
  changePlayState(isPlay){
    this.setData({
      isPlay,
    })
    appInstance.globalData.isMusicPlay = isPlay
  },

  // 获取歌曲详情
  async getMusicInfo(musicId){
    let songDate = await request('/song/detail',{ids: musicId})
    let durationTime = moment(songDate.songs[0].dt).format('mm:ss')
    this.setData({
      song: songDate.songs[0],
      durationTime
    })
    // 动态修改窗口标题
    wx.setNavigationBarTitle({
      title: this.data.song.name
    })
 },

  // 点击播放/暂停
  handleMusicPlay(){
    let isPlay = !this.data.isPlay
    this.setData({
      isPlay: isPlay
    })
    let {musicLink} = this.data
    this.musicControl(isPlay,this.data.song.id,musicLink)
  },

  // 控制音乐的暂停和播放
  async musicControl(isPlay,musicId,musicLink){
    if(isPlay){
      if(!musicLink){
        // 获取音乐播放链接
        let musicLinkData = await request('/song/url',{id:musicId})
        musicLink = musicLinkData.data[0].url
        this.setData({
          musicLink
        })
      }
      this.backgroundAudioManager.src = musicLink
      this.backgroundAudioManager.title = this.data.song.name
    }else{
      this.backgroundAudioManager.pause()
    }
  },

  // 点击切歌
  handleSwitch(e){
    // 切歌类型 prev 或 next
    let type = e.currentTarget.id
    // 发布消息给songDetail
    PubSub.publish('switchType',type)
    // 订阅来自recommendSong发布的消息
    PubSub.subscribe('musicId',(msg,musicId)=>{
      this.setData({
        musicId
      })
      // 获取切换的音乐详情
      this.getMusicInfo(musicId)
      // 自动播放切换后的音乐
      this.musicControl(true,musicId)
      // 取消订阅
      PubSub.unsubscribe('musicId')
    })
    
  },

  // 点击切换播放模式
  changePlayMode(){
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})